﻿using PropertyExpression.Common;

namespace PropertyExpression.RelationalDataInstance
{
    public interface IDataTuple<out TEntity>
    {
        TResult GetValue<TResult>(IPropertyExpressionProxy<TEntity, TResult> propertyExpressionProxy);

        Action<TResult> SetValue<TResult>(IPropertyExpressionProxy<TEntity, TResult> propertyExpressionProxy);

        IDataTuple<TResult> GetRef<TResult>(IPropertyExpressionProxy<TEntity, TResult> propertyExpressionProxy);

        Action<IDataTuple<TResult>> SetRef<TResult>(IPropertyExpressionProxy<TEntity, TResult> propertyExpressionProxy);

        IEnumerable<IDataTuple<TResult>> GetValue<TResult>(
            IPropertyExpressionProxy<TEntity, IEnumerable<TResult>> propertyExpressionProxy);
    }
}
